public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
From: "ian at airs dot com" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug go/58075] Unable to build go on ia64-hp-hpux11.31
Date: Sun, 04 Aug 2013 18:44:00 -0000	[thread overview]
Message-ID: <bug-58075-4-oUj6KsJjbf@http.gcc.gnu.org/bugzilla/> (raw)
In-Reply-To: <bug-58075-4@http.gcc.gnu.org/bugzilla/>

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58075

--- Comment #1 from Ian Lance Taylor <ian at airs dot com> ---
That compilation error means that a configure test detected that the setcontext
call modified TLS variables, which should not happen.  That does happen on some
older versions of Solaris and NetBSD, and the code in libgo/runtime/proc.c has
a workaround for those versions.  Apparently HP/UX also has this bug, and
somebody will need to write a workaround there as well.

The test case can be found in libgo/configure.ac, and I've appended it below. 
The test case should compile and run and exit with a zero exit status (you may
need to provide the -pthread option when compiling and linking, I don't know
what HP/UX requires in that regard).  If the program does not exit with a zero
status, there is a bug in the implementation of setcontext.  I encourage you to
report that bug to HP.

#include <pthread.h>
#include <stdlib.h>
#include <ucontext.h>
#include <unistd.h>

__thread int tls;

static char stack[10 * 1024 * 1024];
static ucontext_t c;

/* Called via makecontext/setcontext.  */

static void
cfn (void)
{
  exit (tls);
}

/* Called via pthread_create.  */

static void *
tfn (void *dummy)
{
  /* The thread should still see this value after calling
     setcontext.  */
  tls = 0;

  setcontext (&c);

  /* The call to setcontext should not return.  */
  abort ();
}

int
main ()
{
  pthread_t tid;

  /* The thread should not see this value.  */
  tls = 1;

  if (getcontext (&c) < 0)
    abort ();

  c.uc_stack.ss_sp = stack;
  c.uc_stack.ss_flags = 0;
  c.uc_stack.ss_size = sizeof stack;
  c.uc_link = NULL;
  makecontext (&c, cfn, 0);

  if (pthread_create (&tid, NULL, tfn, NULL) != 0)
    abort ();

  if (pthread_join (tid, NULL) != 0)
    abort ();

  /* The thread should have called exit.  */
  abort ();
}


  reply	other threads:[~2013-08-04 18:44 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-08-04  2:42 [Bug go/58075] New: " pda at freeshell dot org
2013-08-04 18:44 ` ian at airs dot com [this message]
2013-08-12 23:48 ` [Bug go/58075] " pda at freeshell dot org
2013-08-13  0:00 ` ian at airs dot com
2015-02-03 20:04 ` ian at airs dot com

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=bug-58075-4-oUj6KsJjbf@http.gcc.gnu.org/bugzilla/ \
    --to=gcc-bugzilla@gcc.gnu.org \
    --cc=gcc-bugs@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).