2004-01-13  Ulrich Drepper  <drepper@redhat.com>

	* posix/regex.c: Support crappy compilers and platforms which have
	problems with alloca.
	* posix/regex_internal.h: Likewise.
	Patch by Paolo Bonzini.
This commit is contained in:
Ulrich Drepper 2004-01-14 04:11:30 +00:00
parent 10677727e2
commit 82e2ba9a03
5 changed files with 92 additions and 12 deletions

View File

@ -1,3 +1,10 @@
2004-01-13 Ulrich Drepper <drepper@redhat.com>
* posix/regex.c: Support crappy compilers and platforms which have
problems with alloca.
* posix/regex_internal.h: Likewise.
Patch by Paolo Bonzini.
2004-01-12 Paolo Bonzini <bonzini@gnu.org>
* posix/regcomp.c [_LIBC && !RE_ENABLE_I18N]:

View File

@ -86,13 +86,41 @@
# define CDISABLE bl JUMPTARGET(__librt_disable_asynccancel)
# endif
# ifndef __ASSEMBLER__
# define SINGLE_THREAD_P \
# ifdef HAVE_TLS_SUPPORT
# ifndef __ASSEMBLER__
# define SINGLE_THREAD_P \
__builtin_expect (THREAD_GETMEM (THREAD_SELF, p_multiple_threads) == 0, 1)
# else
# define SINGLE_THREAD_P \
# else
# define SINGLE_THREAD_P \
lwz 10,MULTIPLE_THREADS_OFFSET(2); \
cmpwi 10,0
# endif
# else
# if !defined NOT_IN_libc
# define __local_multiple_threads __libc_multiple_threads
# else
# define __local_multiple_threads __librt_multiple_threads
# endif
# ifndef __ASSEMBLER__
extern int __local_multiple_threads attribute_hidden;
# define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1)
# else
# if !defined PIC
# define SINGLE_THREAD_P \
lis 10,__local_multiple_threads@ha; \
lwz 10,__local_multiple_threads@l(10); \
cmpwi 10,0
# else
# define SINGLE_THREAD_P \
mflr 9; \
bl _GLOBAL_OFFSET_TABLE_@local-4; \
mflr 10; \
mtlr 9; \
lwz 10,__local_multiple_threads@got(10); \
lwz 10,0(10); \
cmpwi 10,0
# endif
# endif
# endif
#elif !defined __ASSEMBLER__

View File

@ -89,13 +89,34 @@
# define __local_multiple_threads __librt_multiple_threads
# endif
# ifndef __ASSEMBLER__
# define SINGLE_THREAD_P \
# ifdef HAVE_TLS_SUPPORT
# ifndef __ASSEMBLER__
# define SINGLE_THREAD_P \
__builtin_expect (THREAD_GETMEM (THREAD_SELF, p_multiple_threads) == 0, 1)
# else
# define SINGLE_THREAD_P \
# else
# define SINGLE_THREAD_P \
lwz 10,MULTIPLE_THREADS_OFFSET(13); \
cmpwi 10,0
# endif
# else /* !HAVE_TLS_SUPPORT */
# ifndef __ASSEMBLER__
extern int __local_multiple_threads
# if !defined NOT_IN_libc || defined IS_IN_libpthread
attribute_hidden;
# else
;
# endif
# define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1)
# else
# define SINGLE_THREAD_P \
.section ".toc","aw"; \
.LC__local_multiple_threads:; \
.tc __local_multiple_threads[TC],__local_multiple_threads; \
.previous; \
ld 10,.LC__local_multiple_threads@toc(2); \
lwz 10,0(10); \
cmpwi 10,0
# endif
# endif
#elif !defined __ASSEMBLER__

View File

@ -18,6 +18,34 @@
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#ifdef _AIX
#pragma alloca
#else
# ifndef allocax /* predefined by HP cc +Olibcalls */
# ifdef __GNUC__
# define alloca(size) __builtin_alloca (size)
# else
# if HAVE_ALLOCA_H
# include <alloca.h>
# else
# ifdef __hpux
void *alloca ();
# else
# if !defined __OS2__ && !defined WIN32
char *alloca ();
# else
# include <malloc.h> /* OS/2 defines alloca in here */
# endif
# endif
# endif
# endif
# endif
#endif
#ifdef _LIBC
/* We have to keep the namespace clean. */
# define regfree(preg) __regfree (preg)

View File

@ -21,10 +21,6 @@
#ifndef _REGEX_INTERNAL_H
#define _REGEX_INTERNAL_H 1
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <assert.h>
#include <ctype.h>
#include <limits.h>