From 092eb73ca2507c29adb37cd8075730e43c1e3794 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Thu, 11 Dec 2003 20:46:47 +0000 Subject: [PATCH] Update. 2003-12-01 Jes Sorensen * 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 --- ChangeLog | 14 ++++- linuxthreads/ChangeLog | 15 +++++ .../sysdeps/unix/sysv/linux/ia64/pt-initfini.c | 66 ++++++++++++++++------ nptl/ChangeLog | 6 ++ nptl/sysdeps/unix/sysv/linux/ia64/pt-initfini.c | 13 ++++- rt/tst-clock.c | 2 + sysdeps/unix/sysv/linux/ia64/clock_getcpuclockid.c | 65 +++++++++++++++++++++ 7 files changed, 160 insertions(+), 21 deletions(-) create mode 100644 sysdeps/unix/sysv/linux/ia64/clock_getcpuclockid.c diff --git a/ChangeLog b/ChangeLog index 8bfcfba..03647d7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2003-12-01 Jes Sorensen + + * 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 * sysdeps/ia64/elf/initfini.c: Add unwind info. @@ -511,7 +519,7 @@ pointer. Adjust callers. * 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 @@ -706,12 +714,12 @@ (re_dfa_t): Add map_notascii field. * posix/regcomp.c (re_compile_internal): Add call of re_string_construct. - (init_dfa): Initialize mpa_notascii. + (init_dfa): Initialize map_notascii. * posix/regex_internal.c: Adjust definitions of re_string_allocate and re_string_construct. Pass DFA to re_string_construct. Adjust definition. Initialize 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. * posix/regex.c: Include localeinfo.h. * posix/regexec.c: Adjust call of re_string_allocate. diff --git a/linuxthreads/ChangeLog b/linuxthreads/ChangeLog index 964256f..296c56f 100644 --- a/linuxthreads/ChangeLog +++ b/linuxthreads/ChangeLog @@ -1,3 +1,18 @@ +2003-12-10 David Mosberger + + * sysdeps/unix/sysv/linux/ia64/pt-initfini.c: Update copyright + message. Add include of . + (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 * sysdeps/unix/sysv/linux/ia64/dl-sysdep.h: New file. diff --git a/linuxthreads/sysdeps/unix/sysv/linux/ia64/pt-initfini.c b/linuxthreads/sysdeps/unix/sysv/linux/ia64/pt-initfini.c index 04d577d..85fd33f 100644 --- a/linuxthreads/sysdeps/unix/sysv/linux/ia64/pt-initfini.c +++ b/linuxthreads/sysdeps/unix/sysv/linux/ia64/pt-initfini.c @@ -1,5 +1,5 @@ /* 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. The GNU C Library is free software; you can redistribute it @@ -36,40 +36,62 @@ * crtn.s puts the corresponding function epilogues in the .init and .fini sections. */ +#include + +#ifdef HAVE_INITFINI_ARRAY + +# define INIT_NEW_WAY \ + ".xdata8 \".init_array\", @fptr(__pthread_initialize_minimal)\n" +# define INIT_OLD_WAY "" +#else +# define INIT_NEW_WAY "" +# define INIT_OLD_WAY \ + "\n\ + st8 [r12] = gp, -16\n\ + br.call.sptk.many b0 = __pthread_initialize_minimal# ;;\n\ + ;;\n\ + adds r12 = 16, r12\n\ + ;;\n\ + ld8 gp = [r12]\n\ + ;;\n" +#endif + __asm__ ("\n\ \n\ #include \"defs.h\"\n\ \n\ /*@HEADER_ENDS*/\n\ \n\ -/*@_init_PROLOG_BEGINS*/\n\ - .section .init\n\ +/*@_init_PROLOG_BEGINS*/\n" + INIT_NEW_WAY + ".section .init\n\ .align 16\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\ -/* 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\ - br.call.sptk.many b0 = __pthread_initialize_minimal# ;;\n\ - ;;\n\ - adds r12 = 16, r12\n\ - ;;\n\ - ld8 gp = [r12]\n\ - ;;\n\ - .align 16\n\ - .endp _init#\n\ + ;;\n" + INIT_OLD_WAY + ".endp _init#\n\ \n\ /*@_init_PROLOG_ENDS*/\n\ \n\ /*@_init_EPILOG_BEGINS*/\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 ar.pfs = r34\n\ mov b0 = r33\n\ @@ -83,18 +105,28 @@ _init:\n\ .global _fini#\n\ .proc _fini#\n\ _fini:\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\ - .align 16\n\ .endp _fini#\n\ \n\ /*@_fini_PROLOG_ENDS*/\n\ \n\ /*@_fini_EPILOG_BEGINS*/\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 ar.pfs = r34\n\ mov b0 = r33\n\ diff --git a/nptl/ChangeLog b/nptl/ChangeLog index ce6e760..472187f 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -1,3 +1,9 @@ +2003-12-10 David Mosberger + + * 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 * sysdeps/unix/sysv/linux/i386/lowlevellock.h (lll_futex_wait): diff --git a/nptl/sysdeps/unix/sysv/linux/ia64/pt-initfini.c b/nptl/sysdeps/unix/sysv/linux/ia64/pt-initfini.c index a048839..b7d4e57 100644 --- a/nptl/sysdeps/unix/sysv/linux/ia64/pt-initfini.c +++ b/nptl/sysdeps/unix/sysv/linux/ia64/pt-initfini.c @@ -87,7 +87,12 @@ _init:\n\ \n\ /*@_init_EPILOG_BEGINS*/\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 ar.pfs = r34\n\ mov b0 = r33\n\ @@ -117,6 +122,12 @@ _fini:\n\ \n\ /*@_fini_EPILOG_BEGINS*/\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 ar.pfs = r34\n\ mov b0 = r33\n\ diff --git a/rt/tst-clock.c b/rt/tst-clock.c index 37b4619..f2f1887 100644 --- a/rt/tst-clock.c +++ b/rt/tst-clock.c @@ -113,6 +113,8 @@ do_test (void) if (clock_getcpuclockid (0, &cl) == 0) /* XXX It's not yet a bug when this fails. */ clock_test (cl); + else + printf("CPU clock unavailble, skipping test\n"); return result; } diff --git a/sysdeps/unix/sysv/linux/ia64/clock_getcpuclockid.c b/sysdeps/unix/sysv/linux/ia64/clock_getcpuclockid.c new file mode 100644 index 0000000..68e5763 --- /dev/null +++ b/sysdeps/unix/sysv/linux/ia64/clock_getcpuclockid.c @@ -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 +#include +#include +#include +#include +#include + + +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; +} -- 2.7.4