From ecd34a083ef758a6a59a9df0a24a7aedfee5cd34 Mon Sep 17 00:00:00 2001
From: ro <ro@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Thu, 31 Jul 2003 12:01:07 +0000
Subject: [PATCH] 	* config.gcc (alpha*-dec-osf[45]*): Enable POSIX
 thread support by 	default.

	* gthr-posix.c: New file.
	* gthr-posix.h: Define _REENTRANT if missing.
	Make _LIBOBJC #pragma weak visible with _LIBOBJC_WEAK.

	* config/alpha/t-osf4 (SHLIB_LINK): Hide dummy functions provided
	by gthr-posix.o.
	* config/alpha/t-osf-pthread: New file.

	* fixinc/inclhack.def (alpha_pthread): New fix.
	* fixinc/fixincl.x: Regenerate.
	* fixinc/tests/base/pthread.h [ALPHA_PTHREAD_CHECK]: New testcase.

	* doc/install.texi (alpha*-dec-osf*): Remove --enable-threads
	warning.
	Fixes PR bootstrap/9330.


git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@69998 138bc75d-0d04-0410-961f-82ee72b054a4
---
 gcc/ChangeLog                   |  21 ++++
 gcc/config.gcc                  |   6 +
 gcc/config/alpha/t-osf-pthread  |   5 +
 gcc/config/alpha/t-osf4         |   4 +
 gcc/doc/install.texi            |   3 -
 gcc/fixinc/fixincl.x            |  55 ++++++++-
 gcc/fixinc/inclhack.def         |  19 +++
 gcc/fixinc/tests/base/pthread.h |   7 ++
 gcc/gthr-posix.c                | 207 ++++++++++++++++++++++++++++++++
 gcc/gthr-posix.h                |  12 +-
 10 files changed, 328 insertions(+), 11 deletions(-)
 create mode 100644 gcc/config/alpha/t-osf-pthread
 create mode 100644 gcc/gthr-posix.c

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 475035d2585f..20ea858a735c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,24 @@
+2003-07-31  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+
+	* config.gcc (alpha*-dec-osf[45]*): Enable POSIX thread support by
+	default.
+
+	* gthr-posix.c: New file.
+	* gthr-posix.h: Define _REENTRANT if missing.
+	Make _LIBOBJC #pragma weak visible with _LIBOBJC_WEAK.
+
+	* config/alpha/t-osf4 (SHLIB_LINK): Hide dummy functions provided
+	by gthr-posix.o.
+	* config/alpha/t-osf-pthread: New file.
+
+	* fixinc/inclhack.def (alpha_pthread): New fix.
+	* fixinc/fixincl.x: Regenerate.
+	* fixinc/tests/base/pthread.h [ALPHA_PTHREAD_CHECK]: New testcase.
+
+	* doc/install.texi (alpha*-dec-osf*): Remove --enable-threads
+	warning.
+	Fixes PR bootstrap/9330.
+
 2003-07-31  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
 
 	* configure.in (gcc_cv_ld_hidden): Also disable on mips-sgi-irix5*
diff --git a/gcc/config.gcc b/gcc/config.gcc
index 427298e76296..c9266a5620ce 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -609,6 +609,12 @@ alpha*-dec-osf[45]*)
 	    target_cpu_default=MASK_SUPPORT_ARCH
 	    ;;
 	esac
+	case x${enable_threads} in
+	x | xyes | xpthreads | xposix)
+	    thread_file='posix'
+	    tmake_file="${tmake_file} alpha/t-osf-pthread"
+	    ;;
+	esac
 	;;
 alpha64-dec-*vms*)
 	tm_file="${tm_file} alpha/vms.h alpha/vms64.h"
diff --git a/gcc/config/alpha/t-osf-pthread b/gcc/config/alpha/t-osf-pthread
new file mode 100644
index 000000000000..968e65cce9ef
--- /dev/null
+++ b/gcc/config/alpha/t-osf-pthread
@@ -0,0 +1,5 @@
+# Provide dummy POSIX threads functions
+LIB2FUNCS_EXTRA += $(srcdir)/gthr-posix.c
+
+# Compile libgcc2 with POSIX threads supports
+TARGET_LIBGCC2_CFLAGS=-pthread
diff --git a/gcc/config/alpha/t-osf4 b/gcc/config/alpha/t-osf4
index 0525d617662f..fe747a3d521d 100644
--- a/gcc/config/alpha/t-osf4
+++ b/gcc/config/alpha/t-osf4
@@ -10,7 +10,11 @@ SHLIB_NAME = @shlib_base_name@.so
 SHLIB_SONAME = @shlib_base_name@.so.1
 SHLIB_OBJS = @shlib_objs@
 
+# Hide all POSIX threads related symbols provided by gthr-posix.c.  This
+# only has an effect if t-osf-pthread is in use.
 SHLIB_LINK = $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \
+	-Wl,-hidden_symbol,pthread\* -Wl,-hidden_symbol,__pthread\* \
+	-Wl,-hidden_symbol,sched_get_\* -Wl,-hidden_symbol,sched_yield \
 	-Wl,-msym -Wl,-set_version,gcc.1 -Wl,-soname,$(SHLIB_SONAME) \
 	-o $(SHLIB_NAME) @multilib_flags@ $(SHLIB_OBJS) -lc && \
 	rm -f $(SHLIB_SONAME) && \
diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi
index 6f3fbf1dbcb9..c1869453f076 100644
--- a/gcc/doc/install.texi
+++ b/gcc/doc/install.texi
@@ -2030,9 +2030,6 @@ As of GNU binutils 2.11.2, neither GNU @command{as} nor GNU @command{ld}
 are supported on Tru64 UNIX, so you must not configure GCC with
 @option{--with-gnu-as} or @option{--with-gnu-ld}.
 
-The @option{--enable-threads} options isn't supported yet.  A patch is
-in preparation for a future release.
-
 GCC writes a @samp{.verstamp} directive to the assembler output file
 unless it is built as a cross-compiler.  It gets the version to use from
 the system header file @file{/usr/include/stamp.h}.  If you install a
diff --git a/gcc/fixinc/fixincl.x b/gcc/fixinc/fixincl.x
index c25527be893d..d08f86c3c0b9 100644
--- a/gcc/fixinc/fixincl.x
+++ b/gcc/fixinc/fixincl.x
@@ -2,11 +2,11 @@
  * 
  * DO NOT EDIT THIS FILE   (fixincl.x)
  * 
- * It has been AutoGen-ed  Thursday July 17, 2003 at 10:34:33 AM PDT
+ * It has been AutoGen-ed  Tuesday July 29, 2003 at 08:15:05 PM MEST
  * From the definitions    inclhack.def
  * and the template file   fixincl
  */
-/* DO NOT CVS-MERGE THIS FILE, EITHER Thu Jul 17 10:34:33 PDT 2003
+/* DO NOT CVS-MERGE THIS FILE, EITHER Tue Jul 29 20:15:06 MEST 2003
  *
  * You must regenerate it.  Use the ./genfixes script.
  *
@@ -15,7 +15,7 @@
  * certain ANSI-incompatible system header files which are fixed to work
  * correctly with ANSI C and placed in a directory that GNU C will search.
  *
- * This file contains 154 fixup descriptions.
+ * This file contains 155 fixup descriptions.
  *
  * See README for more information.
  *
@@ -857,6 +857,45 @@ static const char* apzAlpha_ParensPatch[] = {
     "#ifndef __mips64",
     (char*)NULL };
 
+/* * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ *  Description of Alpha_Pthread fix
+ */
+tSCC zAlpha_PthreadName[] =
+     "alpha_pthread";
+
+/*
+ *  File name selection pattern
+ */
+tSCC zAlpha_PthreadList[] =
+  "|pthread.h|";
+/*
+ *  Machine/OS name selection pattern
+ */
+tSCC* apzAlpha_PthreadMachs[] = {
+        "alpha*-dec-osf*",
+        (const char*)NULL };
+
+/*
+ *  content selection pattern - do fix if pattern found
+ */
+tSCC zAlpha_PthreadSelect0[] =
+       "(#[ \t]*if defined \\(_PTHREAD_ENV_DECC\\) || defined \\(_PTHREAD_ENV_EPCC\\))\n\
+(#[ \t]*define _PTHREAD_USE_PTDNAM_)";
+
+#define    ALPHA_PTHREAD_TEST_CT  1
+static tTestDesc aAlpha_PthreadTests[] = {
+  { TT_EGREP,    zAlpha_PthreadSelect0, (regex_t*)NULL }, };
+
+/*
+ *  Fix Command Arguments for Alpha_Pthread
+ */
+static const char* apzAlpha_PthreadPatch[] = {
+    "format",
+    "%1 || defined (__PRAGMA_EXTERN_PREFIX)\n\
+%2",
+    (char*)NULL };
+
 /* * * * * * * * * * * * * * * * * * * * * * * * * *
  *
  *  Description of Alpha_Sbrk fix
@@ -6109,9 +6148,9 @@ static const char* apzX11_SprintfPatch[] = {
  *
  *  List of all fixes
  */
-#define REGEX_COUNT          173
+#define REGEX_COUNT          174
 #define MACH_LIST_SIZE_LIMIT 261
-#define FIX_COUNT            154
+#define FIX_COUNT            155
 
 /*
  *  Enumerate the fixes
@@ -6135,6 +6174,7 @@ typedef enum {
     ALPHA_ASSERT_FIXIDX,
     ALPHA_GETOPT_FIXIDX,
     ALPHA_PARENS_FIXIDX,
+    ALPHA_PTHREAD_FIXIDX,
     ALPHA_SBRK_FIXIDX,
     AVOID_BOOL_DEFINE_FIXIDX,
     AVOID_BOOL_TYPE_FIXIDX,
@@ -6364,6 +6404,11 @@ tFixDesc fixDescList[ FIX_COUNT ] = {
      ALPHA_PARENS_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
      aAlpha_ParensTests,   apzAlpha_ParensPatch, 0 },
 
+  {  zAlpha_PthreadName,    zAlpha_PthreadList,
+     apzAlpha_PthreadMachs,
+     ALPHA_PTHREAD_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+     aAlpha_PthreadTests,   apzAlpha_PthreadPatch, 0 },
+
   {  zAlpha_SbrkName,    zAlpha_SbrkList,
      apzAlpha_SbrkMachs,
      ALPHA_SBRK_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
diff --git a/gcc/fixinc/inclhack.def b/gcc/fixinc/inclhack.def
index 7fd6f451da02..b593d83d2b95 100644
--- a/gcc/fixinc/inclhack.def
+++ b/gcc/fixinc/inclhack.def
@@ -577,6 +577,25 @@ fix = {
 };
 
 
+/*
+ *  Obey __PRAGMA_EXTERN_PREFIX for Tru64 UNIX <pthread.h>.
+ */
+fix = {
+    hackname  = alpha_pthread;
+    files     = pthread.h;
+    select    = "(#[ \t]*if defined \\(_PTHREAD_ENV_DECC\\) || defined \\(_PTHREAD_ENV_EPCC\\))\n"
+		"(#[ \t]*define _PTHREAD_USE_PTDNAM_)";
+
+    mach      = "alpha*-dec-osf*";
+    c_fix     = format;
+    c_fix_arg = "%1 || defined (__PRAGMA_EXTERN_PREFIX)\n%2";
+
+    test_text = "#  if defined (_PTHREAD_ENV_DECC) || defined (_PTHREAD_ENV_EPCC)\n"
+		"#   define _PTHREAD_USE_PTDNAM_\n"
+		"#  endif";
+};
+
+
 /*
  *  Fix return value of sbrk in unistd.h on Alpha OSF/1 V2.0
  *  And OpenBSD.
diff --git a/gcc/fixinc/tests/base/pthread.h b/gcc/fixinc/tests/base/pthread.h
index ec7ff351f45c..95ad2d56c679 100644
--- a/gcc/fixinc/tests/base/pthread.h
+++ b/gcc/fixinc/tests/base/pthread.h
@@ -15,6 +15,13 @@
 #endif  /* AIX_PTHREAD_CHECK */
 
 
+#if defined( ALPHA_PTHREAD_CHECK )
+#  if defined (_PTHREAD_ENV_DECC) || defined (_PTHREAD_ENV_EPCC) || defined (__PRAGMA_EXTERN_PREFIX)
+#   define _PTHREAD_USE_PTDNAM_
+#  endif
+#endif  /* ALPHA_PTHREAD_CHECK */
+
+
 #if defined( PTHREAD_PAGE_SIZE_CHECK )
 extern int __page_size;
 #endif  /* PTHREAD_PAGE_SIZE_CHECK */
diff --git a/gcc/gthr-posix.c b/gcc/gthr-posix.c
new file mode 100644
index 000000000000..56bbad283011
--- /dev/null
+++ b/gcc/gthr-posix.c
@@ -0,0 +1,207 @@
+/* POSIX threads dummy routines for systems without weak definitions.  */
+/* Compile this one with gcc.  */
+/* Copyright (C) 2003 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING.  If not, write to the Free
+Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+02111-1307, USA.  */
+
+/* As a special exception, if you link this library with other files,
+   some of which are compiled with GCC, to produce an executable,
+   this library does not by itself cause the resulting executable
+   to be covered by the GNU General Public License.
+   This exception does not however invalidate any other reasons why
+   the executable file might be covered by the GNU General Public License.  */
+
+#include "tconfig.h"
+#include "tm.h"
+/* Define so we provide weak definitions of functions used by libobjc only.  */
+#define _LIBOBJC_WEAK
+#include "gthr.h"
+
+int
+pthread_once (pthread_once_t *once ATTRIBUTE_UNUSED,
+	      void (*func) (void) ATTRIBUTE_UNUSED)
+{
+  return -1;
+}
+
+int
+pthread_key_create (pthread_key_t *key ATTRIBUTE_UNUSED,
+		    void (*dtor) (void *) ATTRIBUTE_UNUSED)
+{
+  return -1;
+}
+
+int
+pthread_key_delete (pthread_key_t key ATTRIBUTE_UNUSED)
+{
+  return 0;
+}
+
+void *
+pthread_getspecific (pthread_key_t key ATTRIBUTE_UNUSED)
+{
+  return 0;
+}
+
+int
+pthread_setspecific (pthread_key_t key ATTRIBUTE_UNUSED,
+		     const void *ptr ATTRIBUTE_UNUSED)
+{
+  return 0;
+}
+
+int
+pthread_create (pthread_t *thread ATTRIBUTE_UNUSED,
+		const pthread_attr_t *attr ATTRIBUTE_UNUSED,
+		void *(*start_routine) (void *) ATTRIBUTE_UNUSED,
+		void *arg ATTRIBUTE_UNUSED)
+{
+  return 0;
+}
+
+int
+pthread_mutex_lock (pthread_mutex_t *mutex ATTRIBUTE_UNUSED)
+{
+  return 0;
+}
+
+int
+pthread_mutex_trylock (pthread_mutex_t *mutex ATTRIBUTE_UNUSED)
+{
+  return 0;
+}
+
+int
+pthread_mutex_unlock (pthread_mutex_t *mutex ATTRIBUTE_UNUSED)
+{
+  return 0;
+}
+
+int
+pthread_cond_broadcast (pthread_cond_t *cond ATTRIBUTE_UNUSED)
+{
+  return 0;
+}
+
+int
+pthread_cond_destroy (pthread_cond_t *cond ATTRIBUTE_UNUSED)
+{
+  return 0;
+}
+
+int
+pthread_cond_init (pthread_cond_t *cond ATTRIBUTE_UNUSED,
+		   const pthread_condattr_t *attr ATTRIBUTE_UNUSED)
+{
+  return 0;
+}
+
+int
+pthread_cond_signal (pthread_cond_t *cond ATTRIBUTE_UNUSED)
+{
+  return 0;
+}
+
+int
+pthread_cond_wait (pthread_cond_t *cond ATTRIBUTE_UNUSED,
+		   pthread_mutex_t *mutex ATTRIBUTE_UNUSED)
+{
+  return 0;
+}
+
+void
+pthread_exit (void *value_ptr ATTRIBUTE_UNUSED)
+{
+}
+
+int
+pthread_mutex_init (pthread_mutex_t *mutex ATTRIBUTE_UNUSED,
+		    const pthread_mutexattr_t *attr ATTRIBUTE_UNUSED)
+{
+  return 0;
+}
+
+int
+pthread_mutex_destroy (pthread_mutex_t *mutex ATTRIBUTE_UNUSED)
+{
+  return 0;
+}
+
+pthread_t
+pthread_self (void)
+{
+  return (pthread_t) 0;
+}
+
+#ifdef _POSIX_THREAD_PRIORITY_SCHEDULING
+int
+sched_get_priority_max (int policy ATTRIBUTE_UNUSED)
+{
+  return 0;
+}
+
+int
+sched_get_priority_min (int policy ATTRIBUTE_UNUSED)
+{
+  return 0;
+}
+#endif /* _POSIX_THREAD_PRIORITY_SCHEDULING */
+
+int
+sched_yield (void)
+{
+  return 0;
+}
+
+int
+pthread_attr_destroy (pthread_attr_t *attr ATTRIBUTE_UNUSED)
+{
+  return 0;
+}
+
+int
+pthread_attr_init (pthread_attr_t *attr ATTRIBUTE_UNUSED)
+{
+  return 0;
+}
+
+int
+pthread_attr_setdetachstate (pthread_attr_t *attr ATTRIBUTE_UNUSED,
+			     int detachstate ATTRIBUTE_UNUSED)
+{
+  return 0;
+}
+
+#ifdef _POSIX_THREAD_PRIORITY_SCHEDULING
+int
+pthread_getschedparam (pthread_t thread ATTRIBUTE_UNUSED,
+		       int *policy ATTRIBUTE_UNUSED,
+		       struct sched_param *param ATTRIBUTE_UNUSED)
+{
+  return 0;
+}
+
+int
+pthread_setschedparam (pthread_t thread ATTRIBUTE_UNUSED,
+		       int policy ATTRIBUTE_UNUSED,
+		       const struct sched_param *param ATTRIBUTE_UNUSED)
+{
+  return 0;
+}
+#endif /* _POSIX_THREAD_PRIORITY_SCHEDULING */
+
diff --git a/gcc/gthr-posix.h b/gcc/gthr-posix.h
index 02f70aa9b32c..88234daae93a 100644
--- a/gcc/gthr-posix.h
+++ b/gcc/gthr-posix.h
@@ -1,6 +1,7 @@
 /* Threads compatibility routines for libgcc2 and libobjc.  */
 /* Compile this one with gcc.  */
-/* Copyright (C) 1997, 1999, 2000, 2001 Free Software Foundation, Inc.
+/* Copyright (C) 1997, 1999, 2000, 2001, 2002, 2003
+   Free Software Foundation, Inc.
 
 This file is part of GCC.
 
@@ -34,6 +35,11 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 
 #define __GTHREADS 1
 
+/* Some implementations of <pthread.h> require this to be defined.  */
+#ifndef _REENTRANT
+#define _REENTRANT 1
+#endif
+
 #include <pthread.h>
 #include <unistd.h>
 
@@ -57,7 +63,7 @@ typedef pthread_mutex_t __gthread_mutex_t;
 #pragma weak pthread_mutex_trylock
 #pragma weak pthread_mutex_unlock
 
-#ifdef _LIBOBJC
+#if defined(_LIBOBJC) || defined(_LIBOBJC_WEAK)
 /* Objective-C.  */
 #pragma weak pthread_cond_broadcast
 #pragma weak pthread_cond_destroy
@@ -82,7 +88,7 @@ typedef pthread_mutex_t __gthread_mutex_t;
 #pragma weak pthread_getschedparam
 #pragma weak pthread_setschedparam
 #endif /* _POSIX_THREAD_PRIORITY_SCHEDULING */
-#endif /* _LIBOBJC */
+#endif /* _LIBOBJC || _LIBOBJC_WEAK */
 
 static inline int
 __gthread_active_p (void)
-- 
GitLab