dcavalca / rpms / qemu

Forked from rpms/qemu a year ago
Clone

Blame 0003-linux-user-rename-gettid-to-sys_gettid-to-avoid-clas.patch

Daniel P. Berrangé e24cbb
From 7bfee99b5dc6dd971d4e0dec49af7578ea1b405c Mon Sep 17 00:00:00 2001
Daniel P. Berrangé e24cbb
From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
Daniel P. Berrangé e24cbb
Date: Tue, 19 Mar 2019 17:04:05 +0000
Daniel P. Berrangé e24cbb
Subject: [PATCH 2/2] linux-user: rename gettid() to sys_gettid() to avoid
Daniel P. Berrangé e24cbb
 clash with glibc
Daniel P. Berrangé e24cbb
MIME-Version: 1.0
Daniel P. Berrangé e24cbb
Content-Type: text/plain; charset=UTF-8
Daniel P. Berrangé e24cbb
Content-Transfer-Encoding: 8bit
Daniel P. Berrangé e24cbb
Daniel P. Berrangé e24cbb
The glibc-2.29.9000-6.fc31.x86_64 package finally includes the gettid()
Daniel P. Berrangé e24cbb
function as part of unistd.h when __USE_GNU is defined. This clashes
Daniel P. Berrangé e24cbb
with linux-user code which unconditionally defines this function name
Daniel P. Berrangé e24cbb
itself.
Daniel P. Berrangé e24cbb
Daniel P. Berrangé e24cbb
/home/berrange/src/virt/qemu/linux-user/syscall.c:253:16: error: static declaration of ‘gettid’ follows non-static declaration
Daniel P. Berrangé e24cbb
  253 | _syscall0(int, gettid)
Daniel P. Berrangé e24cbb
      |                ^~~~~~
Daniel P. Berrangé e24cbb
/home/berrange/src/virt/qemu/linux-user/syscall.c:184:13: note: in definition of macro ‘_syscall0’
Daniel P. Berrangé e24cbb
  184 | static type name (void)   \
Daniel P. Berrangé e24cbb
      |             ^~~~
Daniel P. Berrangé e24cbb
In file included from /usr/include/unistd.h:1170,
Daniel P. Berrangé e24cbb
                 from /home/berrange/src/virt/qemu/include/qemu/osdep.h:107,
Daniel P. Berrangé e24cbb
                 from /home/berrange/src/virt/qemu/linux-user/syscall.c:20:
Daniel P. Berrangé e24cbb
/usr/include/bits/unistd_ext.h:34:16: note: previous declaration of ‘gettid’ was here
Daniel P. Berrangé e24cbb
   34 | extern __pid_t gettid (void) __THROW;
Daniel P. Berrangé e24cbb
      |                ^~~~~~
Daniel P. Berrangé e24cbb
  CC      aarch64-linux-user/linux-user/signal.o
Daniel P. Berrangé e24cbb
make[1]: *** [/home/berrange/src/virt/qemu/rules.mak:69: linux-user/syscall.o] Error 1
Daniel P. Berrangé e24cbb
make[1]: *** Waiting for unfinished jobs....
Daniel P. Berrangé e24cbb
make: *** [Makefile:449: subdir-aarch64-linux-user] Error 2
Daniel P. Berrangé e24cbb
Daniel P. Berrangé e24cbb
While we could make our definition conditional and rely on glibc's impl,
Daniel P. Berrangé e24cbb
this patch simply renames our definition to sys_gettid() which is a
Daniel P. Berrangé e24cbb
common pattern in this file.
Daniel P. Berrangé e24cbb
Daniel P. Berrangé e24cbb
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
Daniel P. Berrangé e24cbb
---
Daniel P. Berrangé e24cbb
 linux-user/syscall.c | 11 ++++++-----
Daniel P. Berrangé e24cbb
 1 file changed, 6 insertions(+), 5 deletions(-)
Daniel P. Berrangé e24cbb
Daniel P. Berrangé e24cbb
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
Daniel P. Berrangé e24cbb
index 11729f382c..96cd4bf86d 100644
Daniel P. Berrangé e24cbb
--- a/linux-user/syscall.c
Daniel P. Berrangé e24cbb
+++ b/linux-user/syscall.c
Daniel P. Berrangé e24cbb
@@ -249,7 +249,8 @@ static type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5,	\
Daniel P. Berrangé e24cbb
 #define TARGET_NR__llseek TARGET_NR_llseek
Daniel P. Berrangé e24cbb
 #endif
Daniel P. Berrangé e24cbb
 
Daniel P. Berrangé e24cbb
-_syscall0(int, gettid)
Daniel P. Berrangé e24cbb
+#define __NR_sys_gettid __NR_gettid
Daniel P. Berrangé e24cbb
+_syscall0(int, sys_gettid)
Daniel P. Berrangé e24cbb
 
Daniel P. Berrangé e24cbb
 /* For the 64-bit guest on 32-bit host case we must emulate
Daniel P. Berrangé e24cbb
  * getdents using getdents64, because otherwise the host
Daniel P. Berrangé e24cbb
@@ -5434,7 +5435,7 @@ static void *clone_func(void *arg)
Daniel P. Berrangé e24cbb
     cpu = ENV_GET_CPU(env);
Daniel P. Berrangé e24cbb
     thread_cpu = cpu;
Daniel P. Berrangé e24cbb
     ts = (TaskState *)cpu->opaque;
Daniel P. Berrangé e24cbb
-    info->tid = gettid();
Daniel P. Berrangé e24cbb
+    info->tid = sys_gettid();
Daniel P. Berrangé e24cbb
     task_settid(ts);
Daniel P. Berrangé e24cbb
     if (info->child_tidptr)
Daniel P. Berrangé e24cbb
         put_user_u32(info->tid, info->child_tidptr);
Daniel P. Berrangé e24cbb
@@ -5579,9 +5580,9 @@ static int do_fork(CPUArchState *env, unsigned int flags, abi_ulong newsp,
Daniel P. Berrangé e24cbb
                mapping.  We can't repeat the spinlock hack used above because
Daniel P. Berrangé e24cbb
                the child process gets its own copy of the lock.  */
Daniel P. Berrangé e24cbb
             if (flags & CLONE_CHILD_SETTID)
Daniel P. Berrangé e24cbb
-                put_user_u32(gettid(), child_tidptr);
Daniel P. Berrangé e24cbb
+                put_user_u32(sys_gettid(), child_tidptr);
Daniel P. Berrangé e24cbb
             if (flags & CLONE_PARENT_SETTID)
Daniel P. Berrangé e24cbb
-                put_user_u32(gettid(), parent_tidptr);
Daniel P. Berrangé e24cbb
+                put_user_u32(sys_gettid(), parent_tidptr);
Daniel P. Berrangé e24cbb
             ts = (TaskState *)cpu->opaque;
Daniel P. Berrangé e24cbb
             if (flags & CLONE_SETTLS)
Daniel P. Berrangé e24cbb
                 cpu_set_tls (env, newtls);
Daniel P. Berrangé e24cbb
@@ -10621,7 +10622,7 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1,
Daniel P. Berrangé e24cbb
         return TARGET_PAGE_SIZE;
Daniel P. Berrangé e24cbb
 #endif
Daniel P. Berrangé e24cbb
     case TARGET_NR_gettid:
Daniel P. Berrangé e24cbb
-        return get_errno(gettid());
Daniel P. Berrangé e24cbb
+        return get_errno(sys_gettid());
Daniel P. Berrangé e24cbb
 #ifdef TARGET_NR_readahead
Daniel P. Berrangé e24cbb
     case TARGET_NR_readahead:
Daniel P. Berrangé e24cbb
 #if TARGET_ABI_BITS == 32
Daniel P. Berrangé e24cbb
-- 
Daniel P. Berrangé e24cbb
2.20.1
Daniel P. Berrangé e24cbb