2003-12-01  Jes Sorensen  <jes@wildopensource.com>

	* rt/tst-clock.c (do_test): Print message when skipping
	CLOCK_PROCESS_CPUTIME_ID test.

	* sysdeps/unix/sysv/linux/ia64/clock_getcpuclockid.c: New file.
	Provide CLOCK_PROCESS_CPUTIME_ID only if /proc/sal/itc_drift is 0.

	peek_token.  This avoids some copying and reduces code size.
	(init_dfa): Initialize map_notascii.
	(build_wcs_upper_buffer): If map_notascii is zero use simplified
This commit is contained in:
Ulrich Drepper 2003-12-11 20:46:47 +00:00
parent 2094545723
commit 092eb73ca2
7 changed files with 167 additions and 28 deletions

View File

@ -1,3 +1,11 @@
2003-12-01 Jes Sorensen <jes@wildopensource.com>
* rt/tst-clock.c (do_test): Print message when skipping
CLOCK_PROCESS_CPUTIME_ID test.
* sysdeps/unix/sysv/linux/ia64/clock_getcpuclockid.c: New file.
Provide CLOCK_PROCESS_CPUTIME_ID only if /proc/sal/itc_drift is 0.
2003-12-02 David Mosberger <davidm@hpl.hp.com> 2003-12-02 David Mosberger <davidm@hpl.hp.com>
* sysdeps/ia64/elf/initfini.c: Add unwind info. * sysdeps/ia64/elf/initfini.c: Add unwind info.
@ -511,7 +519,7 @@
pointer. Adjust callers. pointer. Adjust callers.
* posix/regcomp.c (fetch_token): Change interface to match * posix/regcomp.c (fetch_token): Change interface to match
peek_token. This avoid some copying and reduces code size. peek_token. This avoids some copying and reduces code size.
2003-11-21 Jakub Jelinek <jakub@redhat.com> 2003-11-21 Jakub Jelinek <jakub@redhat.com>
@ -706,12 +714,12 @@
(re_dfa_t): Add map_notascii field. (re_dfa_t): Add map_notascii field.
* posix/regcomp.c (re_compile_internal): Add call of * posix/regcomp.c (re_compile_internal): Add call of
re_string_construct. re_string_construct.
(init_dfa): Initialize mpa_notascii. (init_dfa): Initialize map_notascii.
* posix/regex_internal.c: Adjust definitions of re_string_allocate * posix/regex_internal.c: Adjust definitions of re_string_allocate
and re_string_construct. and re_string_construct.
Pass DFA to re_string_construct. Adjust definition. Initialize Pass DFA to re_string_construct. Adjust definition. Initialize
map_notascii field. map_notascii field.
(build_wcs_upper_buffer): If map_notascii is zero use simplfied (build_wcs_upper_buffer): If map_notascii is zero use simplified
method to map ASCII values to upper case. method to map ASCII values to upper case.
* posix/regex.c: Include localeinfo.h. * posix/regex.c: Include localeinfo.h.
* posix/regexec.c: Adjust call of re_string_allocate. * posix/regexec.c: Adjust call of re_string_allocate.

View File

@ -1,3 +1,18 @@
2003-12-10 David Mosberger <davidm@hpl.hp.com>
* sysdeps/unix/sysv/linux/ia64/pt-initfini.c: Update copyright
message. Add include of <stddef.h>.
(INIT_NEW_WAY): New macro.
(INIT_OLD_WAY): Likewise.
(_init): Add unwind directives. Invoke
__pthread_initialize_minimal() via INIT_NEW_WAY or INIT_OLD_WAY,
respectively.
(_init_EPILOG_BEGINS): Add unwind-directives. Drop unused .regstk
directive.
(_fini): Add unwind directives. Drop unnecessary .align 16
directive (bundles are always 16-byte aligned).
(_fini_EPILOG_BEGINS): Add unwind-directives.
2003-11-19 David Mosberger <davidm@hpl.hp.com> 2003-11-19 David Mosberger <davidm@hpl.hp.com>
* sysdeps/unix/sysv/linux/ia64/dl-sysdep.h: New file. * sysdeps/unix/sysv/linux/ia64/dl-sysdep.h: New file.

View File

@ -1,5 +1,5 @@
/* Special .init and .fini section support for ia64. LinuxThreads version. /* Special .init and .fini section support for ia64. LinuxThreads version.
Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc. Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it The GNU C Library is free software; you can redistribute it
@ -36,40 +36,62 @@
* crtn.s puts the corresponding function epilogues * crtn.s puts the corresponding function epilogues
in the .init and .fini sections. */ in the .init and .fini sections. */
__asm__ ("\n\ #include <stddef.h>
\n\
#include \"defs.h\"\n\ #ifdef HAVE_INITFINI_ARRAY
\n\
/*@HEADER_ENDS*/\n\ # define INIT_NEW_WAY \
\n\ ".xdata8 \".init_array\", @fptr(__pthread_initialize_minimal)\n"
/*@_init_PROLOG_BEGINS*/\n\ # define INIT_OLD_WAY ""
.section .init\n\ #else
.align 16\n\ # define INIT_NEW_WAY ""
.global _init#\n\ # define INIT_OLD_WAY \
.proc _init#\n\ "\n\
_init:\n\
alloc r34 = ar.pfs, 0, 3, 0, 0\n\
mov r32 = r12\n\
mov r33 = b0\n\
adds r12 = -16, r12\n\
;;\n\
/* we could use r35 to save gp, but we use the stack since that's what\n\
* all the other init routines will do --davidm 00/04/05 */\n\
st8 [r12] = gp, -16\n\ st8 [r12] = gp, -16\n\
br.call.sptk.many b0 = __pthread_initialize_minimal# ;;\n\ br.call.sptk.many b0 = __pthread_initialize_minimal# ;;\n\
;;\n\ ;;\n\
adds r12 = 16, r12\n\ adds r12 = 16, r12\n\
;;\n\ ;;\n\
ld8 gp = [r12]\n\ ld8 gp = [r12]\n\
;;\n\ ;;\n"
#endif
__asm__ ("\n\
\n\
#include \"defs.h\"\n\
\n\
/*@HEADER_ENDS*/\n\
\n\
/*@_init_PROLOG_BEGINS*/\n"
INIT_NEW_WAY
".section .init\n\
.align 16\n\ .align 16\n\
.endp _init#\n\ .global _init#\n\
.proc _init#\n\
_init:\n\
.prologue\n\
.save ar.pfs, r34\n\
alloc r34 = ar.pfs, 0, 3, 0, 0\n\
.vframe r32\n\
mov r32 = r12\n\
.save rp, r33\n\
mov r33 = b0\n\
.body\n\
adds r12 = -16, r12\n\
;;\n"
INIT_OLD_WAY
".endp _init#\n\
\n\ \n\
/*@_init_PROLOG_ENDS*/\n\ /*@_init_PROLOG_ENDS*/\n\
\n\ \n\
/*@_init_EPILOG_BEGINS*/\n\ /*@_init_EPILOG_BEGINS*/\n\
.section .init\n\ .section .init\n\
.regstk 0,2,0,0\n\ .proc _init#\n\
.prologue\n\
.save ar.pfs, r34\n\
.vframe r32\n\
.save rp, r33\n\
.body\n\
mov r12 = r32\n\ mov r12 = r32\n\
mov ar.pfs = r34\n\ mov ar.pfs = r34\n\
mov b0 = r33\n\ mov b0 = r33\n\
@ -83,18 +105,28 @@ _init:\n\
.global _fini#\n\ .global _fini#\n\
.proc _fini#\n\ .proc _fini#\n\
_fini:\n\ _fini:\n\
.prologue\n\
.save ar.pfs, r34\n\
alloc r34 = ar.pfs, 0, 3, 0, 0\n\ alloc r34 = ar.pfs, 0, 3, 0, 0\n\
.vframe r32\n\
mov r32 = r12\n\ mov r32 = r12\n\
.save rp, r33\n\
mov r33 = b0\n\ mov r33 = b0\n\
.body\n\
adds r12 = -16, r12\n\ adds r12 = -16, r12\n\
;;\n\ ;;\n\
.align 16\n\
.endp _fini#\n\ .endp _fini#\n\
\n\ \n\
/*@_fini_PROLOG_ENDS*/\n\ /*@_fini_PROLOG_ENDS*/\n\
\n\ \n\
/*@_fini_EPILOG_BEGINS*/\n\ /*@_fini_EPILOG_BEGINS*/\n\
.section .fini\n\ .section .fini\n\
.proc _fini#\n\
.prologue\n\
.save ar.pfs, r34\n\
.vframe r32\n\
.save rp, r33\n\
.body\n\
mov r12 = r32\n\ mov r12 = r32\n\
mov ar.pfs = r34\n\ mov ar.pfs = r34\n\
mov b0 = r33\n\ mov b0 = r33\n\

View File

@ -1,3 +1,9 @@
2003-12-10 David Mosberger <davidm@hpl.hp.com>
* sysdeps/unix/sysv/linux/ia64/pt-initfini.c (_init_EPILOG_BEGINS):
Add unwind directives. Drop unused .regstk directive.
(_fini_EPILOG_BEGINS): Add unwind directives.
2003-12-11 Ulrich Drepper <drepper@redhat.com> 2003-12-11 Ulrich Drepper <drepper@redhat.com>
* sysdeps/unix/sysv/linux/i386/lowlevellock.h (lll_futex_wait): * sysdeps/unix/sysv/linux/i386/lowlevellock.h (lll_futex_wait):

View File

@ -87,7 +87,12 @@ _init:\n\
\n\ \n\
/*@_init_EPILOG_BEGINS*/\n\ /*@_init_EPILOG_BEGINS*/\n\
.section .init\n\ .section .init\n\
.regstk 0,2,0,0\n\ .proc _init#\n\
.prologue\n\
.save ar.pfs, r34\n\
.vframe r32\n\
.save rp, r33\n\
.body\n\
mov r12 = r32\n\ mov r12 = r32\n\
mov ar.pfs = r34\n\ mov ar.pfs = r34\n\
mov b0 = r33\n\ mov b0 = r33\n\
@ -117,6 +122,12 @@ _fini:\n\
\n\ \n\
/*@_fini_EPILOG_BEGINS*/\n\ /*@_fini_EPILOG_BEGINS*/\n\
.section .fini\n\ .section .fini\n\
.proc _fini#\n\
.prologue\n\
.save ar.pfs, r34\n\
.vframe r32\n\
.save rp, r33\n\
.body\n\
mov r12 = r32\n\ mov r12 = r32\n\
mov ar.pfs = r34\n\ mov ar.pfs = r34\n\
mov b0 = r33\n\ mov b0 = r33\n\

View File

@ -113,6 +113,8 @@ do_test (void)
if (clock_getcpuclockid (0, &cl) == 0) if (clock_getcpuclockid (0, &cl) == 0)
/* XXX It's not yet a bug when this fails. */ /* XXX It's not yet a bug when this fails. */
clock_test (cl); clock_test (cl);
else
printf("CPU clock unavailble, skipping test\n");
return result; return result;
} }

View File

@ -0,0 +1,65 @@
/* Copyright (C) 2000, 2001, 2003 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library 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
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#include <errno.h>
#include <time.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
int
clock_getcpuclockid (pid_t pid, clockid_t *clock_id)
{
/* We don't allow any process ID but our own. */
if (pid != 0 && pid != getpid ())
return EPERM;
static int itc_usable;
int retval = ENOENT;
if (__builtin_expect (itc_usable == 0, 0))
{
int newval = 1;
int fd = open ("/proc/sal/itc_drift", O_RDONLY);
if (__builtin_expect (fd != -1, 1))
{
char buf[16];
/* We expect the file to contain a single digit followed by
a newline. If the format changes we better not rely on
the file content. */
if (read (fd, buf, sizeof buf) != 2 || buf[0] != '0'
|| buf[1] != '\n')
newval = -1;
close (fd);
}
itc_usable = newval;
}
if (itc_usable > 0)
{
/* Store the number. */
*clock_id = CLOCK_PROCESS_CPUTIME_ID;
retval = 0;
}
return retval;
}