Kaynağa Gözat

[LibOS] fix futex signature

Futex word is int, not unsigned int.
So it should use int * instead of unsigned int *.
Also add fallthrough directive for lint to eliminate warning.
I believe fallthrough of switch clause is intentional, not bug.

Signed-off-by: Isaku Yamahata <isaku.yamahata@gmail.com>
Isaku Yamahata 5 yıl önce
ebeveyn
işleme
b44d8335a1

+ 1 - 1
LibOS/shim/include/shim_handle.h

@@ -283,7 +283,7 @@ DEFINE_LIST(futex_waiter);
 DEFINE_LISTP(futex_waiter);
 DEFINE_LIST(shim_futex_handle);
 struct shim_futex_handle {
-    unsigned int *      uaddr;
+    int *   uaddr;
     LISTP_TYPE(futex_waiter) waiters;
     struct shim_vma *   vma;
     LIST_TYPE(shim_futex_handle) list;

+ 4 - 4
LibOS/shim/include/shim_table.h

@@ -451,8 +451,8 @@ int shim_do_chroot (const char * filename);
 pid_t shim_do_gettid (void);
 int shim_do_tkill (int pid, int sig);
 time_t shim_do_time (time_t * tloc);
-int shim_do_futex (unsigned int * uaddr, int op, int val, void * utime,
-                   unsigned int * uaddr2, int val3);
+int shim_do_futex (int * uaddr, int op, int val, void * utime,
+                   int * uaddr2, int val3);
 int shim_do_sched_getaffinity (pid_t pid, size_t len,
                                __kernel_cpu_set_t * user_mask_ptr);
 int shim_do_set_tid_address (int * tidptr);
@@ -730,8 +730,8 @@ int shim_lremovexattr (const char * path, const char * name);
 int shim_fremovexattr (int fd, const char * name);
 int shim_tkill (int pid, int sig);
 time_t shim_time (time_t * tloc);
-int shim_futex (unsigned int * uaddr, int op, int val, void * utime,
-                unsigned int * uaddr2, int val3);
+int shim_futex (int * uaddr, int op, int val, void * utime,
+                int * uaddr2, int val3);
 int shim_sched_setaffinity (pid_t pid, size_t len,
                             __kernel_cpu_set_t * user_mask_ptr);
 int shim_sched_getaffinity (pid_t pid, size_t len,

+ 2 - 2
LibOS/shim/src/shim_syscalls.c

@@ -797,8 +797,8 @@ DEFINE_SHIM_SYSCALL (tkill, 2, shim_do_tkill, int, pid_t, pid, int, sig)
 DEFINE_SHIM_SYSCALL (time, 1, shim_do_time, time_t, time_t *, tloc)
 
 /* futex: sys/shim_futex.c */
-DEFINE_SHIM_SYSCALL (futex, 6, shim_do_futex, int, unsigned int *, uaddr,
-                     int, op, int, val, void *, utime, unsigned int *, uaddr2,
+DEFINE_SHIM_SYSCALL (futex, 6, shim_do_futex, int, int *, uaddr,
+                     int, op, int, val, void *, utime, int *, uaddr2,
                      int, val3)
 
 SHIM_SYSCALL_PASSTHROUGH (sched_setaffinity, 3, int, pid_t, pid, size_t, len,

+ 4 - 3
LibOS/shim/src/sys/shim_futex.c

@@ -56,8 +56,8 @@ DEFINE_LISTP(shim_futex_handle);
 static LISTP_TYPE(shim_futex_handle) futex_list = LISTP_INIT;
 static LOCKTYPE futex_list_lock;
 
-int shim_do_futex (unsigned int * uaddr, int op, int val, void * utime,
-                   unsigned int * uaddr2, int val3)
+int shim_do_futex (int * uaddr, int op, int val, void * utime,
+                   int * uaddr2, int val3)
 {
     struct shim_futex_handle * tmp = NULL, * futex = NULL, * futex2 = NULL;
     struct shim_handle * hdl = NULL, * hdl2 = NULL;
@@ -156,6 +156,7 @@ int shim_do_futex (unsigned int * uaddr, int op, int val, void * utime,
          * FUTEX_WAIT_BITSET with val3 specified as
          * FUTEX_BITSET_MATCH_ANY. */
 
+            /* FALLTHROUGH */
         case FUTEX_WAIT:
             if (utime && timeout_us == NO_TIMEOUT) {
                 struct timespec *ts = (struct timespec*) utime;
@@ -283,7 +284,7 @@ int shim_do_futex (unsigned int * uaddr, int op, int val, void * utime,
                 ret = -EAGAIN;
                 break;
             }
-
+            /* FALLTHROUGH */
         case FUTEX_REQUEUE: {
             assert(futex2);
             struct futex_waiter * waiter, * wtmp;