diff mbox

configure: Check whether makecontext() is a glibc stub function

Message ID 1330014005-25831-1-git-send-email-peter.maydell@linaro.org
State Accepted
Commit cdf84806a129a33155d8f93342d377884de9b563
Headers show

Commit Message

Peter Maydell Feb. 23, 2012, 4:20 p.m. UTC
On some systems (notably ARM Linux) glibc provides implementations
of makecontext(), getcontext() and friends which are stubs which
always return failure. Make the configure test for makecontext()
also check for the presence of the __stub_makecontext macro which
indicates the presence of these stubs, so we can avoid trying to use
them and fall back to a different coroutine implementation instead.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
I think this fixes the last of the bugs which meant we had to declare
ARM hosts as officially unsupported in QEMU 1.0...

 configure |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

Comments

Anthony Liguori Feb. 24, 2012, 7:47 p.m. UTC | #1
On 02/23/2012 10:20 AM, Peter Maydell wrote:
> On some systems (notably ARM Linux) glibc provides implementations
> of makecontext(), getcontext() and friends which are stubs which
> always return failure. Make the configure test for makecontext()
> also check for the presence of the __stub_makecontext macro which
> indicates the presence of these stubs, so we can avoid trying to use
> them and fall back to a different coroutine implementation instead.
>
> Signed-off-by: Peter Maydell<peter.maydell@linaro.org>
> ---
> I think this fixes the last of the bugs which meant we had to declare
> ARM hosts as officially unsupported in QEMU 1.0...

Applied.  Thanks.

And happy to see ARM host support restored.  I guess it's now time to try 
running Windows under QEMU on my beaglebone :-)

Regards,

Anthony Liguori

>
>   configure |    4 ++++
>   1 files changed, 4 insertions(+), 0 deletions(-)
>
> diff --git a/configure b/configure
> index 037f7f7..9fbf88a 100755
> --- a/configure
> +++ b/configure
> @@ -2712,11 +2712,15 @@ fi
>
>   ##########################################
>   # check if we have makecontext
> +# (and that it's not a glibc stub which always returns -1)
>
>   ucontext_coroutine=no
>   if test "$darwin" != "yes"; then
>     cat>  $TMPC<<  EOF
>   #include<ucontext.h>
> +#ifdef __stub_makecontext
> +#error Ignoring glibc stub makecontext which will always fail
> +#endif
>   int main(void) { makecontext(0, 0, 0); return 0; }
>   EOF
>     if compile_prog "" "" ; then
diff mbox

Patch

diff --git a/configure b/configure
index 037f7f7..9fbf88a 100755
--- a/configure
+++ b/configure
@@ -2712,11 +2712,15 @@  fi
 
 ##########################################
 # check if we have makecontext
+# (and that it's not a glibc stub which always returns -1)
 
 ucontext_coroutine=no
 if test "$darwin" != "yes"; then
   cat > $TMPC << EOF
 #include <ucontext.h>
+#ifdef __stub_makecontext
+#error Ignoring glibc stub makecontext which will always fail
+#endif
 int main(void) { makecontext(0, 0, 0); return 0; }
 EOF
   if compile_prog "" "" ; then