qemu-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-commits] [COMMIT 91b40c5] Fix Sparc/Linux host breakage bydf70204d


From: Anthony Liguori
Subject: [Qemu-commits] [COMMIT 91b40c5] Fix Sparc/Linux host breakage bydf70204db53e3611af986f434e74a882bce190ca
Date: Sun, 13 Sep 2009 15:21:23 -0000

From: Blue Swirl <address@hidden>

While i386, x86_64 and Sparc64/OpenBSD still worked after
df70204db53e3611af986f434e74a882bce190ca, Sparc32 and Sparc64 Linux hosts
broke.

Partially revert the commit: make the restored code conditional to
!CONFIG_USER_PIE.

Signed-off-by: Blue Swirl <address@hidden>

diff --git a/configure b/configure
index 494e9ce..2d46d39 100755
--- a/configure
+++ b/configure
@@ -2364,9 +2364,10 @@ if test "$target_softmmu" = "yes" ; then
 fi
 
 if test "$target_user_only" = "yes" -a "$static" = "no" -a \
-       "$user_pie" = "yes" ; then
+  "$user_pie" = "yes" ; then
   cflags="-fpie $cflags"
   ldflags="-pie $ldflags"
+  echo "CONFIG_USER_PIE=y" >> $config_mak
 fi
 
 if test "$target_softmmu" = "yes" -a \( \
diff --git a/linux-user/main.c b/linux-user/main.c
index 81a1ada..f3455c5 100644
--- a/linux-user/main.c
+++ b/linux-user/main.c
@@ -48,6 +48,27 @@ int have_guest_base;
 static const char *interp_prefix = CONFIG_QEMU_PREFIX;
 const char *qemu_uname_release = CONFIG_UNAME_RELEASE;
 
+/* for recent libc, we add these dummy symbols which are not declared
+   when generating a linked object (bug in ld ?) */
+#if ((__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) && \
+     !defined(CONFIG_STATIC)) && !defined(CONFIG_USER_PIE)
+asm(".globl __preinit_array_start\n"
+    ".globl __preinit_array_end\n"
+    ".globl __init_array_start\n"
+    ".globl __init_array_end\n"
+    ".globl __fini_array_start\n"
+    ".globl __fini_array_end\n"
+    ".section \".rodata\"\n"
+    "__preinit_array_start:\n"
+    "__preinit_array_end:\n"
+    "__init_array_start:\n"
+    "__init_array_end:\n"
+    "__fini_array_start:\n"
+    "__fini_array_end:\n"
+    ".long 0\n"
+    ".previous\n");
+#endif
+
 /* XXX: on x86 MAP_GROWSDOWN only works if ESP <= address + 32, so
    we allocate a bigger stack. Need a better solution, for example
    by remapping the process stack directly at the right place */




reply via email to

[Prev in Thread] Current Thread [Next in Thread]