Fix Sparc/Linux host breakage by df70204db5
While i386, x86_64 and Sparc64/OpenBSD still worked after
df70204db5
, Sparc32 and Sparc64 Linux hosts
broke.
Partially revert the commit: make the restored code conditional to
!CONFIG_USER_PIE.
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
This commit is contained in:
parent
c5ff6d5472
commit
91b40c5be8
1
configure
vendored
1
configure
vendored
@ -2367,6 +2367,7 @@ if test "$target_user_only" = "yes" -a "$static" = "no" -a \
|
||||
"$user_pie" = "yes" ; then
|
||||
cflags="-fpie $cflags"
|
||||
ldflags="-pie $ldflags"
|
||||
echo "CONFIG_USER_PIE=y" >> $config_mak
|
||||
fi
|
||||
|
||||
if test "$target_softmmu" = "yes" -a \( \
|
||||
|
@ -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 */
|
||||
|
Loading…
Reference in New Issue
Block a user