re PR bootstrap/9330 ([alpha-osf]small alphaev56-dec-osf5.1 --enable-threads=posix problem)

* 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.

From-SVN: r69998
This commit is contained in:
Rainer Orth 2003-07-31 12:01:07 +00:00 committed by Rainer Orth
parent 620a329bbb
commit 2a4e8ebc13
10 changed files with 328 additions and 11 deletions

View File

@ -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*

View File

@ -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"

View File

@ -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

View File

@ -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) && \

View File

@ -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

View File

@ -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,

View File

@ -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.

View File

@ -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 */

207
gcc/gthr-posix.c Normal file
View File

@ -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 */

View File

@ -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)